/*
 * JitterControlProfiler.h
 *
 *  Created on: 2011-05-08
 *      Author: Jagger
 */

#ifndef JITTERCONTROLPROFILER_H_
#define JITTERCONTROLPROFILER_H_

#include "AbstractProfiler.h"

/**
 * Profiler regulujacy opoznienie przy przesylaniu pakietow.
 */
class JitterControlProfiler : public AbstractProfiler
{
	simsignal_t packetDelaySignal;

protected:
	/**
	 * Oczekiwane srednie opoznienie przy przesylaniu pakietu.
	 */
	simtime_t expectedPacketDelay;
	/**
	 * Obecne srednie opoznienie przy przesylaniu pakietu.
	 */
	simtime_t currentPacketDelay;
	/**
	 * Czas wyslania ostatniego pakietu.
	 */
	simtime_t lastPacketSendTime;
	/**
	 * Suma wszystkich opoznien pakietow do tej pory.
	 */
	simtime_t packetDelaySum;
	/**
	 * Liczba pakietow wyslanych do profilera. Pomaga wyliczyc srednie opoznienie.
	 */
	uint32_t packetsReceived;
	/**
	 * Ostatnio zakolejkowany pakiet.
	 */
	NetPacket* lastQueuedPacket;

	virtual void initialize();
	virtual bool acceptPacket(NetPacket* packet, simtime_t& delay);
};

#endif /* JITTERCONTROLPROFILER_H_ */
